【概念篇】epoch和step

参考:https://www.jiqizhixin.com/articles/2017-09-25-3

在一个工厂中有1000w的任务量,存在5条生产线,每条生产线不相关的去处理这100w的任务,而在单位时间内,每条生产线只能处理100个任务,每次处理任务即会出现一次结果,而一次epoch就是一次输出最终结果所需要经历的所有操作。

则整个流程中:

  • 每个生产线实质就是分布式的一个worker
  • 每个生产线单位时间内处理的任务量实质就是batch_size
  • 每输出一次结果的过程就是一个step
  • 每处理完一次数据则是一个epoch,一次epoch处理完的任务量为step * batch_size

需要注意的是:

  • 但是这些处理掉的任务量并非是总任务量的 1/10。因为不同worker间处理的样本抽样是相互独立的
  • 而一个worker内的不同step的任务可以是有放回抽样,也可以是无放回抽样,由相关配置决定
  • 最好一个epoch内处理的任务量是可以遍历全部的任务的(即step * batch_size = 1000w),但是事实上由于OOB(袋外数据)可知始终有一部分(36.8%)不会被选中

这样做的好处是:

  • 如果worker非独立,即不同worker处理的任务是相异的,则由于每个任务的差异性和worker的执行速度不同,会导致数据倾斜带来的执行缓慢
  • worker内每个step的样本抽样最好是无放回抽样,可保证使用尽可能多的样本信息

results matching ""

    No results matching ""